package bat.iog.utils;//package iog.hytool.reactor.multiple;
//
//import java.nio.channels.Selector;
//import java.nio.channels.ServerSocketChannel;
//
///**
// * 单Reactor多线程模型
// */
//public class OneReactorMultiThreadMode {
//
//        public static void main(String[] args) {
//        /**
//         * 初始化一个线程池，然后启动MultiReacor
//         */
//        ThreadPool.getPool().init(3);
//        new MultiReactor(8089).run();
//
//        }
//
//        }
//class MultiReactor implements Runnable{
//
//    private Selector selector;
//
//    private ServerSocketChannel servChannel;
//
//    privatevolatileboolean stop;
//
//    public MultiReactor(int port) {
//        try {
//            selector = Selector.open();
//            servChannel = ServerSocketChannel.open();
//            servChannel.configureBlocking(false);
//            servChannel.socket().bind(new InetSocketAddress(port), 1024);
//            SelectionKey sk = servChannel.register(selector, SelectionKey.OP_ACCEPT);
//            stop=false;
//            System.out.println("The time server is start in port : " + port);
//        } catch (IOException e) {
//            e.printStackTrace();
//            System.exit(1);
//        }
//    }
//    @Override
//    publicvoid run() {
//        while (!stop) {
//            try {
//                selector.select(1000);
//                Set<SelectionKey> selectedKeys = selector.selectedKeys();
//                Iterator<SelectionKey> it = selectedKeys.iterator();
//                SelectionKey key = null;
//                while (it.hasNext()) {
//                    key = it.next();
//                    it.remove();
//                    try {
//                        disptach(key);
//                    } catch (Exception e) {
//                        if (key != null) {
//                            key.cancel();
//                            if (key.channel() != null)
//                                key.channel().close();
//                        }
//                    }
//                }
//            } catch (Throwable t) {
//                t.printStackTrace();
//            }
//        }
//    }
//
//    privatevoid disptach(SelectionKey key) {
//        if(key.isValid()){
//            if(key.isAcceptable()){
//                new MultiAcceptor(key).run();
//            }
//            if (key.isReadable()){
//                new MultiReadHandler(key).run();
//            }
//            if(key.isWritable()){
//                new MultiWriteHandler(key).run();
//            }
//        }
//    }
//}
//class MultiAcceptor {
//
//    private SelectionKey selectionKey;
//
//    public MultiAcceptor(SelectionKey selectionKey) {
//        this.selectionKey = selectionKey;
//    }
//
//    publicvoid run() {
//        try {
//            ServerSocketChannel ssc = (ServerSocketChannel) selectionKey.channel();
//            SocketChannel sc = ssc.accept();
//            sc.configureBlocking(false);
//            Selector selector = selectionKey.selector();
//            SelectionKey sk = sc.register(selector, SelectionKey.OP_READ);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//
//    }
//}
//class MultiReadHandler {
//
//    private SelectionKey selectionKey;
//
//    public MultiReadHandler(SelectionKey selectionKey) {
//        this.selectionKey = selectionKey;
//    }
//
//
//
//    publicvoid run() {
//        try {
//            final SocketChannel sc = (SocketChannel) selectionKey.channel();
//            //使用线程池，异步处理读请求
//            ThreadPool.getPool().submit(new Runnable() {
//                @Override
//                publicvoid run() {
//                    doRead(sc);
//                }
//            });
//
//            //处理完读请求，将通道注册为写
//            Selector selector = selectionKey.selector();
//            SelectionKey sk = sc.register(selector, SelectionKey.OP_WRITE);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//    }
//
//    privatevoid doRead(SocketChannel ssc) {
//        System.out.println("读取数据，然后做一些数据处理");
//    }
//}
//class MultiWriteHandler {
//
//    private SelectionKey selectionKey;
//
//    public MultiWriteHandler(SelectionKey selectionKey) {
//        this.selectionKey = selectionKey;
//    }
//
//
//
//    publicvoid run() {
//        try {
//            final SocketChannel sc = (SocketChannel) selectionKey.channel();
//            //使用线程池，异步处理写请求
//            ThreadPool.getPool().submit(new Runnable() {
//                @Override
//                publicvoid run() {
//                    doWrite(sc);
//                }
//            });
//            //写完后，将通道注册为读
//            Selector selector = selectionKey.selector();
//            SelectionKey sk = sc.register(selector, SelectionKey.OP_READ);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//    }
//
//    privatevoid doWrite(SocketChannel sc) {
//        System.out.println("处理写。。。");
//    }
//}
///**
// * 示例-线程池
// */class ThreadPool{
//
//    publicstaticfinal ThreadPool pool = new ThreadPool();
//
//    privateboolean init=false;
//
//    privatestatic ExecutorService executorService;
//
//    private ThreadPool(){};
//
//    publicsynchronizedvoid init(int size){
//        if(!init){
//            executorService=Executors.newFixedThreadPool(size);
//            init=true;
//        }else {
//            System.out.println("the thread pool had inited");
//        }
//
//    }
//
//    publicstatic ThreadPool getPool(){
//        return pool;
//    }
//
//    publicvoid submit(Runnable runnable){
//        if(init){
//            executorService.submit(runnable);
//        }else {
//            thrownew RuntimeException("the thread pool is not inited");
//        }
//    }
//}